import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import eslintPlugin from 'vite-plugin-eslint'
import { viteMockServe } from 'vite-plugin-mock'
import { resolve } from 'path'
import viteCompression from 'vite-plugin-compression'
// Vite配置按需导入
import Components from 'unplugin-vue-components/vite'
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/
export default defineConfig(({ command, mode }) => {
    console.info('define config...................................')
    console.info('COMMAND:', command, ', MODE:', mode, ', IsDevelopment', (command === 'serve'))
    console.info('process.cwd()', process.cwd())
    console.info('define config................................end...')
    const env = loadEnv(mode, process.cwd(), '')
    return {
        base: env.VITE_APP_BASE_URL || './', // 开发或生产环境服务的公共基础路径
        // 默认vite只会暴露VITE开头变量。此时可以在其他文件通过import.meta.env.变量名获取环境变量
        envPrefix:  ['VITE', 'VUE'], // 环境变量前缀,默认只会暴露VITE开头变量，定义后可暴露VUE开头变量
        optimizeDeps: {
            force: false // 强制进行依赖预构建
        },
        server: {
            host: true, // 监听所有地址,
            strictPort: true, // 设置为false，端口被占用会直接退出
            port: 5000,
            proxy: {
                '/webapi': {
                    target: 'http://10.2.2.98:8090',
                    changeOrigin: true,
                    rewrite: (path) => path.replace(/^\/webapi/, '')
                }
            },
            hmr: {
                overlay: true
            }
        },
        build: {
            outDir: 'build', // 打包文件的输出目录
            assetsDir: 'static', // 静态资源的存放目录
            assetsInlineLimit: 4096 // 图片转 base64 编码的阈值
        },
        resolve: {
            alias: {
                'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
                '@': resolve(__dirname, './src') // 路径别名
            },
            extensions: ['.js', '.ts', '.json'] // 导入时想要省略的扩展名列表
        },
        plugins: [
            vue(),
            viteCompression({
            // 开启gzip模式
                verbose: true, //是否在控制台输出压缩结果，默认为 true
                disable: false, //是否禁用压缩，默认为 false
                threshold: 1024000, // 对大于 1mb 的文件进行压缩
                algorithm: 'gzip', //采用的压缩算法，默认是 gzip
                ext: '.gz', //生成的压缩包后缀
                deleteOriginFile: false //压缩后是否删除原文件，默认为 false
            }),
            eslintPlugin({
                include: ['src/**/*.js', 'src/**/*.vue', 'src/*.js', 'src/*.vue']
            }),
            viteMockServe({
            // 设置模拟数据的存储文件夹
                mockPath: './src/mockjs/virtually/',
                watchFiles: true, // 是否监视mockPath下文件内容变更
                supportTs: false, // 设置为true时不能读取js文件
                ignore: /^\\_/, // 忽略开始_路径
                localEnabled: true, // 开发环境
                // 在main.js注册后需要在此处注入，否则可能报找不到setupProdMockServer的错误
                injectFile: resolve('src/main.js'),
                injectCode: ' import { setupProdMockServer } from \'./src/mock\';setupProdMockServer(); ',

            }),
            Components({
                // dirs 指定组件所在位置，默认为 src/components
                // 可以让我们使用自己定义组件的时候免去 import 的麻烦
                //dirs: ['src/components'],
                extensions: ['vue'],
                deep: true,  // 搜索子目录
                include: [/\.vue$/, /\.vue\?vue/], //只识别vue文件
                resolevrs: [
                    AntDesignVueResolver({
                        importStyle: 'less', // 如果需要自定义主题色，则需要配置importSytle: 'less'
                        resolveIcons: false
                    })
                ]
            })
        ],
        css: {
            // css预处理
            preprocessorOptions: {
                less: {
                    javascriptEnabled: true,
                    charset: false,
                    modifyVars: {
                        'primary-color': '#1da57a',
                        'link-color': '#1da57a',
                        'border-radius-base': '2px',
                        // 引入全局基础less变量
                        hack: `true; @import (reference) "${resolve('src/assets/theme/variable.less')}";`
                    },
                    //additionalData: '@import "./src/assets/theme/global.less";'
                }
            }
        },
        clearScreen: true, // vite清屏不清除控制台打印的信息
        logLevel: 'info'
    }})
